// 使用 加载事件 将所有执行的程序 都定义在 加载程序中执行
// 为了确保 所有的程序 都是在 html程序之后执行 
$(function () {
    // 1, 在 id是sc的a标签中 写入验证码 
    $('#sc').html(setVC({ bool: false })).click(function () { $('#sc').html(setVC({ bool: false })) })

    // 2, 给 账号input 添加 失去焦点并且数据改变事件
    $('[name="userName"]').change(function () {
        // 调用使用 async 和 await 定义的异步程序 
        selectName();
    })

    // 3, 给 注册button 添加点击事件 
    $('button').click(function () {
        // 获取数据验证判断 
        // 实际项目中 根据后端程序的项目需求 执行 正则验证 
        // 我们目前简单的验证 两个密码必须相同 两个验证码必须相同

        let name = $('[name="userName"]').val();

        let pwd1 = $('[name="userPwd1"]').val();

        // 验证码input标签 的 value
        let vc1 = $('#ac').val();
        // 验证码a标签的 内容
        let vc2 = $('#sc').html()




        // 两次的验证码要 相同  
        // 要不要区分大小写 看 实际项目需求  
        // 如果 要 区分大小写 直接 === 全等比较 
        // 如果 不要 区分大小写 先 字符串 统一大小写 再进行全等比较
        // 目前写一个 不区分 大小写 
        if (vc1.toLowerCase() !== vc2.toLowerCase()) {
            // 如果 两个验证码 不同 写入提示信息 
            alert('验证码有误')
            // 重置 验证码
            $('#sc').html(setVC({ bool: false }));

            // return 终止 之后程序的执行
            return

        }
        register();

    })
})
// 使用 async 封装函数  验证 用户名 是不是 重复 
async function selectName() {
    // 通过 await 向 PHP程序 发送请求
    let res = await myPromiseAjax({
        // 向PHP程序发送请求
        url: '../server/goods_select_name.php',
        // 请求方式是PHP设定的post方式
        type: 'post',
        // 携带参数的键名 是 PHP程序设定的 userName
        // 携带参数的键值 是 账号input标签 的数据数值
        data: { userName: $('[name="userName"]').val() },

    });

    // 将 json字符串 结果 还原为 对应的数据类型
    res = JSON.parse(res);

    console.log(res);

    // 根据 res 的结果 向 页面 写入内容 
    if (res.code === 1) {
        // 账号可以使用 写入提示信息
        alert(res.msg)
    } else if (res.code === 0) {
        // 账号不能使用 写入提示信息
        alert(res.msg)
    }
}

// 使用 async 封装函数  注册操作 
async function register() {
    // 因为 async 声明的函数 执行方式 不同 
    // 定义在 函数外的变量 在 函数内 不能调用的

    // 方法1 可以 在 函数内 获取数据 
    let userName = $('[name="userName"]').val();
    let pwd1 = $('[name="userPwd1"]').val();

    // 方法2 在调用函数的同时 给 函数传参数据


    // 使用 await 调用 函数 
    let res = await myPromiseAjax({
        url: '../server/goods_register.php',
        type: 'post',
        data: {
            userName: userName,
            userPwd: pwd1,
        },
    });

    res = JSON.parse(res);

    console.log(res);

    // 根据res结果 执行不同程序 
    if (res.code === 0) {
        // 写入注册失败的提示信息
        alert(res.msg)
        // 重置 验证码 

    } else if (res.code === 1) {
        // 定义变量 存储 倒计时 
        window.location='../login/index.html'
    }
}



/*
      1,  验证码内容 
        通过 之前 分装的 setVC() 函数 生成随机验证码
        写入 id是sc的超链接标签 

        给 超链接标签 添加 点击事件 
        点击时 生成 新的 验证码

      2,  账号input 失去焦点并且数据改变事件 
        向 PHP程序 发送请求
        查看当前 账号 是不是 已经存在 

        向 server/goods_select_name.php 文件 发送请求 
        以 post 方式 发送请求 
        携带 一个 参数 
        键名是  userName  是 要查询的用户名

      3,  注册功能 

        (1) 验证判断  
          两个密码 必须完全相同 
            如果不同 写入提示信息 重置验证码 return终止之后的程序
            如果相同 清除 错误提示信息 

          两个验证码
            验证码input标签输入的数据 
            验证码a标签 的内容 

            如果 区分 两个验证码的大小写 直接 === 全等比较判断 
            如果 不区分 两个验证码的大小写 先 统一字符串大小写 再 === 全等比较判断 

            如果不同 写入提示信息 重置验证码 return终止之后的程序
            如果相同 清除 错误提示信息 


        (2) 向 PHP程序 发送请求完成 注册功能
          向 server/goods_register.php 发送请求 
          以 post 方式 发送请求 
          携带 2个参数 
            userName  用户名  
            userPwd   用户密码

      4,  async 封装函数的特别说明 

        因为 async 封装函数的特殊执行方式 
        定义在 async 函数外的变量 
        在 async 函数内 不能调用 
        
        解决方法1 
          在函数内部 再次获取 数据 

        解决方法2
          给 async 声明的函数 定义参数 
          通过 传参 将数据 传输给 async 函数


    
      前端后端数据交互检查报错 
        1,  js程序报错  
          按照 报错的行号 在 对应行的上线文 找问题 

        2,  数据交互报错
          network 中 找 报错 

          url地址 是否正确 有没有 中文,特殊符号等

          请求方式 是不是 正确

          携带参数 
            键名 键值 

          响应体 
            是 正确的响应体结果 还是 后端程序报错

        3,  就算程序执行成功
          也需要检查程序执行时 携带参数 是不是 正确 
          可以在 数据库 bk2208 user 中 查看 注册的账号密码数据 


    
    
    
    
    
    
    
    
    */
